package manager

import "fmt"

// Gift 表示单个礼物的信息
type LevelSet struct {
	Level      int    `json:"level"`       // 等级
	UpperLimit int    `json:"upper_limit"` //等级上限分数
	LevelGift  string `json:"level_gift"`
}

// GiftManager 管理所有礼物
type LevelManager struct {
	levelSets map[int]LevelSet
}

// 定义全局的gift列表
var levelList = []LevelSet{
	{Level: 1, UpperLimit: 9000, LevelGift: "1_ji_li_wu"},       // 12元
	{Level: 2, UpperLimit: 28500, LevelGift: "2_ji_li_wu"},      // 38元
	{Level: 3, UpperLimit: 66000, LevelGift: "3_ji_li_wu"},      // 88元
	{Level: 4, UpperLimit: 150000, LevelGift: "4_ji_li_wu"},     // 200元
	{Level: 5, UpperLimit: 300000, LevelGift: "5_ji_li_wu"},     // 400元
	{Level: 6, UpperLimit: 675000, LevelGift: "6_ji_li_wu"},     // 900元
	{Level: 7, UpperLimit: 1500000, LevelGift: "7_ji_li_wu"},    // 2000元
	{Level: 8, UpperLimit: 3800000, LevelGift: "8_ji_li_wu"},    // 5066元
	{Level: 9, UpperLimit: 6050000, LevelGift: "9_ji_li_wu"},    // 8066元
	{Level: 10, UpperLimit: 11275000, LevelGift: "10_ji_li_wu"}, // 15033元
}

// NewLevelManager 初始化LevelManager
func NewLevelManager() *LevelManager {
	levelSets := make(map[int]LevelSet)
	for _, levelInfo := range levelList {
		levelSets[levelInfo.Level] = levelInfo
	}
	return &LevelManager{
		levelSets: levelSets,
	}
}

func (gm *LevelManager) GetLevelSets() (map[int]LevelSet, error) {
	// 创建一个副本并返回
	levelSetsCopy := make(map[int]LevelSet)
	for k, v := range gm.levelSets {
		levelSetsCopy[k] = v
	}
	return levelSetsCopy, nil
}

// GetGiftByID 根据ID获取对应的整个Gift信息
func (gm *LevelManager) GetLevelInfoByLevel(level int) (*LevelSet, error) {
	levelInfo, exists := gm.levelSets[level]
	if !exists {
		return nil, fmt.Errorf("can not find gift by gift id") // 或者可以返回一个包含零值的Gift，取决于你的需求
	}
	return &levelInfo, nil
}

// GetGiftByID 根据ID获取对应的整个Gift信息
func (gm *LevelManager) GetLevelInfoByUpperScore(score int) (*LevelSet, error) {
	finalIndex := len(gm.levelSets)
	minLevelBigger := gm.levelSets[finalIndex].Level
	for index, levelInfo := range gm.levelSets {
		if score <= levelInfo.UpperLimit {
			if levelInfo.Level < minLevelBigger {
				minLevelBigger = levelInfo.Level
				finalIndex = index
			}
		}
	}
	levelInfo, exists := gm.levelSets[finalIndex]
	if !exists {
		return nil, fmt.Errorf("invalid level")
	}
	return &levelInfo, nil
}
